package com.xianggu.threadPool.callable;

import java.util.concurrent.*;

/***
 * 使用线程池的Callable示例
 */
public class CallableWithThreadPool {
    public static void main(String[] args) {
        // 创建固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(3);
        
        // 创建Callable任务
        Callable<String> task = () -> {
            Thread.sleep(1000);  // 模拟耗时操作
            return "任务执行完成，线程: " + Thread.currentThread().getName();
        };
        
        try {
            // 提交任务并获取Future对象
            Future<String> future = executor.submit(task);

            // 检查任务是否完成
            if (future.isDone()) {
                System.out.println("任务已完成");
            }else{
                System.out.println("任务执行中");
            }

            // 获取任务结果（会阻塞直到任务完成）
            String result = future.get();
            System.out.println(result);
            
            // 检查任务是否完成
            if (future.isDone()) {
                System.out.println("任务已完成");
            }
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        } finally {
            // 关闭线程池
            executor.shutdown();
        }
    }
}